/**
 * 将中间信息替换为 char
 * @param value 待替换字符串
 * @param min 前面替换几个字符
 * @param max 后面替换几个字符
 * @param char 要替换为的字符
 */
export function replaceMiddle(value: string, min, max, char = '*'): string {
    const minNum = Number(min);
    const maxNum = Number(max);
    // 如果min + max大于value的长度，则直接返回全部替换为*
    if (minNum + maxNum > value.length) {
        return replaceAll(value, min, max);
    }
    const len = value.length;
    const before = value.substring(0, minNum);
    const after = value.substring(len - maxNum, len);
    return before + char.repeat(len - before.length - after.length) + after;
}

/**
 * 将字符串替换为同等长度的 char
 * @param value 待替换字符串
 * @param _
 * @param __
 * @param char 要替换为的字符
 */
export function replaceAll(value: string, _ = "", __ = "", char = '*'): string {
    return char.repeat(value.length);
}

/**
 * 转为随机数
 * @param value 待处理字符串
 * @param min 随机最小值
 * @param max 随机最大值
 * @param digits 保留几位小数，0则为整数
 */
export function replaceNum(value: string, min, max, digits = 0): string {
    const minNum = Number(min);
    const maxNum = Number(max);
    // 如果随机数范围没确定
    if (Number.isNaN(minNum) || Number.isNaN(maxNum)) {
        return value;
    }

    let num: string | number = "";
    const range = maxNum - minNum;
    const rand = Math.random();
    if (digits === 0) {
        num = minNum + Math.round(rand * range); //四舍五入
    } else {
        num = (minNum + rand * range).toFixed(digits); // 保留两位小数
    }
    return String(num);
}

/**
 * 将字符串中指定字符串替换为另一个指定字符串
 * @param value 待替换字符串
 * @param min 指定字符串
 * @param max 指定字符串
 */
export function replaceStr(value: string, min, max): string {
    return value.replace(min, max);
}

/**
 * 使用正则匹配字符串进行替换
 * @param value 待处理字符串
 * @param min 正则表达式字符串
 * @param max 指定字符串
 */
export function replaceRegExp(value: string, min, max): string {
    return value.replace(eval(min), max);
}

export const ruleFun = {
    "1": replaceMiddle,
    "2": replaceAll,
    "3": replaceNum,
    "4": replaceStr,
    "5": replaceRegExp,
}